www.gusucode.com > Matlab在化学工程中的应用 > Matlab在化学工程中的应用/实用化工计算机模拟-Matlab在化学工程中的应用/Examples/Chapter 5/PDEs2DS_CrankNicolson.m

    function PDEs2DS_CrankNicolson
% 用有限差分求解固定床反应器二维拟均相稳态模型(二维稳态PDE方程组)
%
%   Author: HUANG Huajiang
%   Copyright 2003 UNILAB Research Center, 
%   East China University of Science and Technology, Shanghai, PRC
%   $Revision: 1.0 $  $Date: 2002/05/02 $

global n F G rc dz M M1 b1 b2 C2 C3 C4
% Increment of r and z
n = 5+1;            % node number in r direction is 5 
m = 100;
dr = 0.01;          % m
dz = 0.0585;        % m

% Parameters
Ramda = 0.45;       % W/(m K)
G = 2500;           % kg/(m^2 h)
Cp = 2.18;          % kJ/(kg K)
dH = 140e3;         % J/mol
rho = 1440;         % kg/m^3
a = 0.05;           % radius of reactor, m
u0c0 = 0.069/(pi*a^2);  % u0*c0 obtained from u0*c0*A=0.069 kmol/h
Cp1 = 1.0e3;        % 烟道气比热,J/(kg K)
F = 130/3600;       % kg/s

% Equation coefficient(方程的系数)
a1 = Ramda/(G*Cp*1000)*3600;    % m
b1 = dH*rho/G/Cp;       % Note of unit accordance:dH*rho/G/Cp rc = [K/m],rc=[kmol/(kg h)]
a2 = 0.000427;          % a2 = D2/mu
b2 = rho/u0c0;
           
C1 = 2*pi*a*Ramda/(F*Cp1);      % formula (12)
C2 = 4*dr/(dz*C1);              % formula (33)
M = a1*dz /dr^2;                % formula (17)
M1 = a2*dz /dr^2;               % formula (19)
C3 = M*C2/2*(1+0.5/(n-1))-(1+M);  
C4 = M*C2/2*(1+0.5/(n-1))-(1-M);

% Initializing variables, at the inlet of the reactor
% (在反应器入口处即z=0或j=1时初值)
T(1:n-1) = 873;
T(n) = 893;
x(1:n) = 0;
X0 = [T;x];
Tresult(1,:) = X0(1,:);
xresult(1,:) = X0(2,:);

% Calculate F(i,j),G(i,j) and rc(i,j) at z=0 (initial value)
% 计算对应于j=1时的F(i,1)和G(i,1)及反应速度rc
FGrc(T,x);

for j=2:m
    X = fsolve(@TxEquations,X0);    % Solve nonlinear equations
    T = X(1,:);
    x = X(2,:);
    Tresult(j,:) = T
    xresult(j,:) = x
    xa(j,:) = sum(2*xresult(j,2)+4*xresult(j,3)+6*xresult(j,4)...
        +8*xresult(j,5)+5*xresult(j,6))/25 
    if xa(j)>0.45       % When the average conversion > 0.45, stop calculating and exit the loop
        break
    end
    
    % Calculate F(i,j),G(i,j) and rc(i,j) for the next iteration
    % 计算F(i,j)和G(i,j)及反应速度rc(i,j)供下次迭代使用
    FGrc(T,x)
   
end
z = dz.*[0:j-1];
r = dr.*[0:n-1];
% When the  conversion rate of ethylbenzene is 45%, the reactor length required is:
z = z'
L = spline(xa,z,0.45)

% Plot the results
surf(r,z,Tresult)   % 反应管轴径向温度分布
xlabel('r (m)')
ylabel('z (m)')
zlabel('T (K)')
figure
plot(z,xa)          % 平均转化率沿管长的分布图
xlabel('z (m)')
ylabel('x_a_v')
figure
surf(r,z,xresult)   % 轴径向平均转化率分布
xlabel('r (m)')
ylabel('z (m)')
zlabel('x')

% --------------------------------------------------------------------------
function f = ReactionRate(T,x)
% Calculate the reaction rate(计算反应速度)
k = 0.027*exp(0.021*(T-773));
f = 15100*exp(-11000./T).*((1-x)./(11+x)-1.2*x.^2./k./(11+x).^2);

% --------------------------------------------------------------------------
function f = FGrc(T,x)
% Calculate F(i), G(i)
global F G rc n dz M M1 b1 b2 C2 C3 C4
rc = ReactionRate(T,x);         % Calculate the reaction rate

F(1) = ((1-2*M)*T(1)+2*M*T(2)-b1*dz/2*rc(1))/(1+2*M);       % formula (28)
G(1) = ((1-2*M1)*x(1)+2*M1*x(2)+b2*dz/2*rc(1))/(1+2*M1);    % formula (29)
i = (2:5);
    var1 = 1-0.5./(i-1);
    var2 = 1+0.5./(i-1);
    F(i) = ( M/2*( var1.*T(i-1)+var2.*T(i+1) )  + (1-M)*T(i) -b1*dz/2*rc(i) )/(M+1);    % formula (22)
    G(i) =( M1/2*( var1.*x(i-1)+var2.*x(i+1) )  + (1-M1)*x(i)+b2*dz/2*rc(i) )/(M1+1);   % formula (23)
F(n) = ( -M*T(n-1) +C4*T(n)+b1*dz/2*rc(n) )/ C3;            % formula (35) 
G(n) = ( M1*x(n-1)+(1-M1)*x(n)+b2*dz/2*rc(n) )/(1+M1);      % formula (31)

% --------------------------------------------------------------------------
function f = TxEquations(X)
% Define the linear equation system composed of (20)、(21) 、(26)、(27)、(30) and (34).
global n F G rc dz M M1 b1 b2 C2 C3
T = X(1,:)     
x = X(2,:)     
fT(1) = F(1) + (2*M*T(2)-b1/2*dz*rc(1) )/(1+2*M) - T(1);        % formula (26)
fx(1) = G(1) + (2*M1*x(2)+b2/2*dz*rc(1) )/(1+2*M1) - x(1);      % formula (27)
for i=2:n-1
    var1(i) = (1-0.5/(i-1));
    var2(i) = (1+0.5/(i-1));
    fT(i) = F(i)+ ( M/2*(var1(i)*T(i-1)+var2(i)*T(i+1))-b1/2*dz*rc(i) )/(M+1) - T(i);   % formula (20)
    fx(i) = G(i)+ ( M1/2*(var1(i)*x(i-1)+var2(i)*x(i+1))+b2/2*dz*rc(i) )/(M1+1) - x(i); % formula (21)
end
fT(n) = F(n) + ( -M*T(n-1)+b1/2*dz*rc(n) )/C3 -T(n);            % formula (34)
fx(n) = G(n) + ( M1*x(n-1)+b2/2*dz*rc(n) )/(1+M1) - x(n);       % formula (30)
f = [fT;fx];